Code: Show/Hide /* this code very simplified, removed sanity checks, etc */ local int playerKey; struct playerData { int kills; int deaths; } //raise kills and deaths local void Kill(Arena *arena, Player *killer, Player *killed, int bounty, int flags, int *pts, int *green) { struct playerData *killerData = PPDATA(killer, playerKey); struct playerData *killedData = PPDATA(killed, playerKey); killerData->kills++; killedData->deaths++; } //reset kills and deaths when a new game begins local void StartGame (Arena *arena) { Player *p; Link *link; pd->Lock(); FOR_EACH_PLAYER(p) { if (arena == p->arena) { struct playerData *pData = PPDATA(p, playerKey); pData->deaths = pData->kills = 0; } } pd->Unlock(); } //reset kills and deaths when entering a new arena local void PlayerAction (Player *p, int action, Arena *arena) { if (action == PA_ENTERARENA) { struct playerData *pData = PPDATA(p, playerKey); pData->deaths = pData->kills = 0; } |
Code: Show/Hide local PlayerPersistentData persistData = { 5560050, INTERVAL_GAME, PERSIST_ALLARENAS, getData, setData, clearData }; EXPORT int MM_mymodule(int action, Imodman *mm_, Arena *arena) { if (action == MM_LOAD) { ... persist->RegPlayerPD(&persistData); ... } else if (action == MM_UNLOAD) { ... persist->UnregPlayerPD(&persistData); ... } } local int GetData(Player *p, void *data, int len, void *clos) { //.. } local void SetData(Player *p, void *data, int len, void *clos) { //.. } local void ClearData(Player *p, void *clos) { //.. } |
Code: Show/Hide persist->EndInterval(NULL, arena, INTERVAL_GAME); |