Code: Show/Hide case EVENT_PlayerEntering: { Player *p = (Player*)event.p[0]; set_tag(p, PHERE, 1); } break; case EVENT_PlayerLeaving: { Player *p = (Player*)event.p[0]; //killTags(p); set_tag(p, PHERE, 99); } break; case EVENT_Tick: { for (int i = 0; i <1; ++i) --countdown[i]; if(countdown[0] < 1) { countdown[0]=300; // reset timer every 5 mins // CODE NEEDED TO LOCATE PLAYERS NOT HERE } |
Code: Show/Hide if (c->check("tags")) { _listnode <PlayerTag> *parse = taglist.head; PlayerTag *tag; while (parse) { tag = parse->item; parse = parse->next; sendPublic("P: " + (String)tag->data + " INDEX: " + (String)tag->index + " DATA: " + (String) tag->data); //taglist.kill(tag); } } |
Code: Show/Hide #define TAGLEAVETIME 100 //index of the tag #define KILLTAGDELAY 300000 //5 minutes .... case EVENT_PlayerEntering: { Player *p = (Player*)event.p[0]; //Reset leave time set_tag(p, TAGLEAVETIME , 0); } break; case EVENT_PlayerLeaving: { Player *p = (Player*)event.p[0]; //killTags(p); //Set the tag to current time set_tag(p, TAGLEAVETIME , GetTickCount()); } break; .... case EVENT_Tick: { for (int i = 0; i <1; ++i) --countdown[i]; //every second, check if any tags need to be killed CheckTagsToKill(); } ... void botInfo::CheckTagsToKill() { _listnode <PlayerTag> *parse = taglist.head; PlayerTag *tag; while (parse) { tag = parse->item; if (tag->index == TAGLEAVETIME && tag->value != 0 && GetTickCount() - tag->value > KILLTAGDELAY) killTags(tag->player); parse = parse->next; } } |
Code: Show/Hide struct PlayerTag { Player *p; char name[20]; // int index; int data; }; void botInfo::killTags_byname(char *pname) { _listnode <PlayerTag> *parse = taglist.head; PlayerTag *tag; while (parse) { tag = parse->item; parse = parse->next; if ((String)tag->name != (String)pname) continue; /// sendPublic("deleted function: " + (String)pname); taglist.kill(tag); } } ticker// _listnode <PlayerTag> *parse = taglist.head; PlayerTag *tag; while (parse) { tag = parse->item; if (tag->index == 9) { if(tag->data == 99) { tag->data = 98; } else if(tag->data == 98) { killTags_byname((String)tag->name); } else if(tag->data == 1){ tag->data = 98; sendPublic("data=98"); } } parse = parse->next; } |
Code: Show/Hide struct PlayerData { char name[20]; int thisdata; int thatdata; int blahblah; int LeaveTime; }; ... _linkedlist <PlayerData> datalist; //not sure about exact syntax here ... case EVENT_PlayerEntering: { Player *p = (Player*)event.p[0]; //search the datalist list, if an item->name matches p->name, set_tag the data back on the player } break; case EVENT_PlayerLeaving: { Player *p = (Player*)event.p[0]; PlayerData* data = new PlayerData; if (data == NULL) break; strcpy(...);//whatever the syntax is... copy p->name to data->name data->thisdata = get_tag(p, ....); //set all data you want to remember data->LeaveTime = GetTickCount(); datalist.append(data); killTags(p); } break; |
Code: Show/Hide case EVENT_PlayerEntering: { Player *p = (Player*)event.p[0]; int PID = GetPilot(p); if(PID==0) { AddPilot(p); } else{pilots[PID].ishere = 1;} } break; case EVENT_PlayerLeaving: { Player *p = (Player*)event.p[0]; killTags(p); int PID = GetPilot(p); if(PID!=0) { pilots[PID].ishere = GetTickCount(); } } break; .. // Called once every 90 sec - gives atleast 5 mins to return, as much as 6.5 mins void botInfo::DoCleanUp() { int isvalue; for (int PID = 2; PID < playercount; PID++) { isvalue = pilots[PID].ishere; if(isvalue !=1 && GetTickCount() - isvalue > 300000) { ClearStruct(PID); } } } |
Code: Show/Hide struct PlayerData { char name[20]; int kills; int deaths; int tks; int points; int bonus; int multikill; int optmsg; int ishere; }; .. void botInfo::ClearStruct(int PID) { strncpy(pilots[PID].name, "AVAIL", 20); pilots[PID].kills = 0; pilots[PID].deaths= 0; pilots[PID].tks = 0; pilots[PID].points = 0; pilots[PID].bonus = 0; pilots[PID].multikill = 0; pilots[PID].optmsg = 0; pilots[PID].ishere = 1; } |
Code: Show/Hide _linkedlist <PlayerData> myplayerdata; ... //to create a new struct: //allocate memory PlayerData* newdata = new PlayerData; //initialize data strncpy(newdata->name, p->name, 20); newdata->kills = 0; newdata->deaths= 0; newdata->tks = 0; newdata->points = 0; newdata->bonus = 0; newdata->multikill = 0; newdata->optmsg = 0; newdata->ishere = 1; //append the new struct to the list myplayerdata.append(newdata); |
Code: Show/Hide PlayerData* FindDataByName(char* name)
{ _listnode <PlayerData> *parse = myplayerdata.head; PlayerData *data; while (parse) { data = parse->item; if (strcmp(...)) // compare data->name with name //if they're the same: return data; parse = parse->next; } return NULL; } |
Code: Show/Hide void KillData(Player *p) //kills data associated to player p { PlayerData* data = FindDataByName(p->name); if (data != NULL) myplayerdata.kill(data); //else, no struct associated to that player was found } |